function grad = gradient_cov_constraint(h_s, h_c, w, z, X, alpha)
    % 自定义函数：计算关于位置X的梯度
    %
    % 输入:
    % h_s - 感知信道向量，依赖于MA的位置X
    % h_c - 通信信道向量，依赖于MA的位置X
    % w - 波束成形向量
    % z - 人工噪声向量
    % X - MA 位置
    % alpha - 加权参数
    %
    % 输出:
    % grad - 关于位置X的梯度

    delta = 1e-4;  % 用于计算梯度的微小扰动
    grad = zeros(size(X));  % 初始化梯度向量

    % 遍历 MA 位置的维度，逐个计算偏导数
    for i = 1:length(X)
        X_pos = X;
        X_neg = X;
        
        % 正向扰动和负向扰动
        X_pos(i) = X_pos(i) + delta;
        X_neg(i) = X_neg(i) - delta;

        % 更新感知信道和通信信道（假设其为MA位置X的函数）
        h_s_pos = update_channel(h_s, X_pos);  % 更新信道h_s
        h_s_neg = update_channel(h_s, X_neg);
        
        h_c_pos = update_channel(h_c, X_pos);  % 更新信道h_c
        h_c_neg = update_channel(h_c, X_neg);
        
        % 计算扰动后的 SCNR 和 SINR
        SCNR_s_pos = (abs(h_s_pos' * w)^2) / (w' * (h_s_pos * h_s_pos') * w + abs(h_s_pos' * z)^2);
        SCNR_s_neg = (abs(h_s_neg' * w)^2) / (w' * (h_s_neg * h_s_neg') * w + abs(h_s_neg' * z)^2);
        
        SINR_c_pos = (abs(h_c_pos' * w)^2) / (abs(h_c_pos' * z)^2);
        SINR_c_neg = (abs(h_c_neg' * w)^2) / (abs(h_c_neg' * z)^2);

        % 计算关于X的目标函数的导数
        grad_SCNR = (SCNR_s_pos - SCNR_s_neg) / (2 * delta);
        grad_SINR = (SINR_c_pos - SINR_c_neg) / (2 * delta);
        
        % 目标函数的导数加权
        grad(i) = alpha * grad_SCNR + (1 - alpha) * grad_SINR;
    end
end
